/*
    原始数据类型
*/
//原始值传参不影响
let num = 5;

function addOne(val) {
  val++;
  console.log("函数内部值为", val);
}
//函数调用
addOne(num);

console.log("函数外部值为", num);

/*
    引用数据类型
*/
let obj = {
  name: "duby",
  age: 19,
};
console.log("函数调用前的值", obj);

function changeList(val) {
  val.age = 25;
  val.name = "sam";
  console.log("函数内部值", val);
}
//函数调用
changeList(obj);
console.log("函数外部值", obj);

/*
    参数个数
*/
function getVal(val1, val2, val3 = val1 + val2) {
  console.log("val1的值为", val1);
  console.log("val2的值为", val2);
  console.log("val3的值为", val3);
}

getVal("a", "b");

/*
    参数默认值
*/
getVal("abc");

/*
    默认值
*/
function getDefault(val = 15) {
  console.log("val的值为", val);
}

getDefault(undefined);

function getOther(a, b, ...other) {
  console.log("多余的参数为", other);
}

getOther("hello", "world", 1, 2, 3, "smile");

function getArgs(a, b) {
  //arguments是函数的内置对象
  //接收一切参数
  console.log(arguments);

  //通过索引访问
  console.log("函数接收到的第一个参数为", arguments[0]);
}

getArgs("hello", "world", "happy", "ending");
